/**
 * All-right reserved by gglu\lqz\qq 2010-2020
 */
package com.injury.hunan.common.utils;

import java.io.IOException;
import java.io.StringWriter;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;

/**
 * 请写上此类的主要功能
 * 
 * @author gglu
 * @version 2008年7月21日 下午4:20:21
 * @surpportjdk 1.5+
 * 
 */
public class JSONUtils {
	
	/**
	 * 日志记录.
	 */
	private static Logger logger = LoggerFactory.getLogger(JSONUtils.class);

	/**
	 * 
	 */
	private static ObjectMapper objectMapper = new ObjectMapper();

	private JSONUtils() {

	}

	/**
	 * 将对象JSON格式
	 */
	public static String Object2String(Object obj, JSONOption option) {
		StringWriter sw = new StringWriter();
		if (null == option) {
			logger.debug("本次JSON，未指定option...");
		}

		try {
			// 后续实现将使用option来控制JSON过程.

			objectMapper.writeValue(sw, obj);
		} catch (Exception e) {
			logger.error("JSON化对象失败 ...", e);
			throw new RuntimeException(e);
		}
		return sw.toString();
	}

	/**
	 * 将jsondata解析成对象
	 */
	public static <T> T String2Object(String jsonData, Class<T> clazz, JSONOption option) {
		// 后续实现将使用option来控制反JSON过程.
		try {
			return objectMapper.readValue(jsonData, clazz);
		} catch (Exception e) {
			logger.error("内容({0})反JSON成对象时出现异常", jsonData, e);
			throw new RuntimeException(e);
		}

	}
	
	
	
	
	/**
	 * 
	 * 用于控制JSON序列化和反序列化所需参数.
	 * @author gglu
	 * @version 2008年7月21日 下午4:22:06
	 * @surpportjdk 1.5+
	 *
	 */
	public static class JSONOption{
		
	}

}
